setwd("C:/Novayre/GIT-Projects/data-analysis-coursera/Week 03/R/raw scripts")
if(!exists(x="pData")){
  library(Hmisc)
  library(hexbin)
  library(maps)
  pData <- read.csv("../../data/ss06pid.csv")
}
boxplot(pData$AGEP,col="blue") 
# comparamos AGEP en una escala comun segun los distintos valores de DDRS
boxplot(pData$AGEP ~ as.factor(pData$DDRS),col="blue")
# codificamos la cantidad de muestras que tiene cada factor
boxplot(pData$AGEP ~ as.factor(pData$DDRS),col=c("blue","orange"),names=c("yes","no"),varwidth=TRUE)

# usamos table para calcular el recuento de los que tienen cada valor 
barplot(table(pData$CIT),col="blue")
# es muy parecido a hacer un histograma
hist(pData$CIT,col="green")

hist(pData$AGEP,col="blue")
#podemos cambiar el numero de barras para tener mas detalle
hist(pData$AGEP,col="blue",breaks=100,main="Age")

# tb podemos crear una densidad que es como un histograma pero mas smooth
# calcula el porcentaje en lugar del conteo real
dens <- density(pData$AGEP)
plot(dens,lwd=3,col="blue")
#una de las ventajas de dens es que podemos superponer distintas graficas segun valores de factores o que pertenezcan a determinado rango 
#p.ej el sexo
dens <- density(pData$AGEP)
densMales <- density(pData$AGEP[which(pData$SEX==1)])
plot(dens,lwd=3,col="blue")
lines(densMales,lwd=3,col="orange")

#scatterplots (las variables tienen que tener el mismo numero de muestras pq represento los pares)
# suelen servir para ver ouliers o patrones extraños en los datos, correlaciones, etc.
plot(pData$JWMNP, pData$WAGP, pch=19, col="blue")
# a veces conviene bajar el tamaño de los puntos para verlos mejor
plot(pData$JWMNP,pData$WAGP,pch=19,col="blue",cex=0.5)
#tab podemos usar colores (el vector de colores debe ser numerico)
plot(pData$JWMNP,pData$WAGP,pch=19,col=pData$SEX,cex=0.5)
# tambien podemos usar tamaños (en este ejemplo, los puntos más pequeños son personas mas jovenes) aunque puede ser mas dificil de ver
percentMaxAge <- pData$AGEP/max(pData$AGEP)
plot(pData$JWMNP,pData$WAGP,pch=19,col="blue",cex=percentMaxAge*0.5)
# podemos dibujar lineas para marcar territorios, comparar cosas, etc.
plot(pData$JWMNP,pData$WAGP,pch=19,col="blue",cex=0.5)
lines(rep(100,dim(pData)[1]),pData$WAGP,col="grey",lwd=5)
points(seq(0,200,length=100),seq(0,20e5,length=100),col="red",pch=19)
# se pueden crear factores a partir de numerics asociando rangos a cada valor del factor
# al pintar los factores con distintos colores podremos buscar patrones visualmente
ageGroups <- cut2(pData$AGEP,g=5)
plot(pData$JWMNP,pData$WAGP,pch=19,col=ageGroups,cex=0.5)
# si tenemos muchos puntos no vemos nada
x <- rnorm(1e5)
y <- rnorm(1e5)
plot(x,y,pch=19)
#podemos muestrear y no pintarlos todos
x <- rnorm(1e5)
y <- rnorm(1e5)
sampledValues <- sample(1:1e5,size=1000,replace=FALSE)
plot(x[sampledValues],y[sampledValues],pch=19)
#otra opcion es usar smooth scatter que pinta mas oscuras las zonas con mas puntos
x <- rnorm(1e5)
y <- rnorm(1e5)
smoothScatter(x,y)
#otra forma de ver mas oscuras las zonas con mas puntos
x <- rnorm(1e5)
y <- rnorm(1e5)
hbo <- hexbin(x,y)
plot(hbo)


# qqplot es para ver la relacion entre dos variable
x <- rnorm(20); y <- rnorm(20)
qqplot(x,y)
abline(c(0,1))

# para imprimir matrices (imprimimos cada columna de la matriz como una linea)
# suele usarse para imprimir cosas sobre el tiempo
X <- matrix(rnorm(20*5),nrow=20)
matplot(X,type="b")

# heat maps para pintar valores filas contra columnas 
image(1:10,161:236,as.matrix(pData[1:10,161:236]))
#para conseguir que las columnas aparezcan como columnas y las filas como filas
newMatrix <- as.matrix(pData[1:10,161:236])
newMatrix <- t(newMatrix)[,nrow(newMatrix):1]
image(161:236, 1:10, newMatrix) 

#mapas
map("world")
lat <- runif(40,-180,180); lon <- runif(40,-90,90)
points(lat,lon,col="blue",pch=19)

# los missing values no se imprimen
x <- c(NA,NA,NA,4,5,6,7,8,9,10)
y <- 1:10
plot(x,y,pch=19,xlim=c(0,11),ylim=c(0,11))
#podemos analizar si los NA siempre aparecen en un determinado rango de valores o no
x <- rnorm(100)
y <- rnorm(100)
y[x < 0] <- NA
boxplot(x ~ is.na(y))
22
